<!DOCTYPE html>
<html>

<head>

<title>BMP Suite Image List</title>

<style>
 .b { background:url(bkgd.png); }
 .q { background-color:#fff0e0; }
 .bad { background-color:#ffa0a0; }
</style>

</head>

<body>

<h1>BMP Suite Image List</h1>

<p><i>For <a href="http://entropymine.com/jason/bmpsuite/">BMP Suite</a>
version 2.3</i></p>

<p>This document describes the images in <i>BMP Suite</i>, and shows what
I allege to be the correct way to interpret them. PNG and JPEG images are
used for reference.
</p>

<p>It also shows how your web browser displays the BMP images,
but that&rsquo;s not its main purpose.
BMP is poor image format to use on web pages, so a web browser&rsquo;s
level of support for it is arguably not important.</p>

<table border=1 cellpadding=8>

 <tr>
  <th>File</th>
  <th>Ver.</th>
  <th>Correct display</th>
  <th>In your browser</th>
  <th>Notes</th>
 </tr>

 <tr>
  <td>g/pal1.bmp</td>
  <td>3</td>
  <td class=b><img src="pal1.png"></td>
  <td class=b><img src="../g/pal1.bmp"></td>
  <td>1 bit/pixel paletted image, in which black is the first color in
   the palette.</td>
 </tr>

 <tr>
  <td>g/pal1wb.bmp</td>
  <td>3</td>
  <td class=b><img src="pal1.png"></td>
  <td class=b><img src="../g/pal1wb.bmp"></td>
  <td>1 bit/pixel paletted image, in which white is the first color in
   the palette.</td>
 </tr>

 <tr>
  <td>g/pal1bg.bmp</td>
  <td>3</td>
  <td class=b><img src="pal1bg.png"></td>
  <td class=b><img src="../g/pal1bg.bmp"></td>
  <td>1 bit/pixel paletted image, with colors other than black and white.</td>
 </tr>

 <tr>
  <td class=q>q/pal1p1.bmp</td>
  <td>3</td>
  <td class=b><img src="pal1p1.png"></td>
  <td class=b><img src="../q/pal1p1.bmp"></td>
  <td>1 bit/pixel paletted image, with only one color in the palette.
   The documentation says that 1-bpp images have a palette size of 2
   (not &ldquo;up to 2&rdquo;), but it would be silly for a viewer not to
   support a size of 1.</td>
 </tr>

 <tr>
  <td class=q>q/pal2.bmp</td>
  <td>3</td>
  <td class=b><img src="pal2.png"></td>
  <td class=b><img src="../q/pal2.bmp"></td>
  <td>A paletted image with 2 bits/pixel. Usually only 1, 4,
   and 8 are allowed, but 2 is legal on Windows CE.</td>
 </tr>

 <tr>
  <td>g/pal4.bmp</td>
  <td>3</td>
  <td class=b><img src="pal4.png"></td>
  <td class=b><img src="../g/pal4.bmp"></td>
  <td>Paletted image with 12 palette colors, and 4 bits/pixel.</td>
 </tr>

 <tr>
  <td>g/pal4rle.bmp</td>
  <td>3</td>
  <td class=b><img src="pal4.png"></td>
  <td class=b><img src="../g/pal4rle.bmp"></td>
  <td>4-bit image that uses RLE compression.</td>
 </tr>

 <tr>
  <td class=q>q/pal4rletrns.bmp</td>
  <td>3</td>
  <td class=b><img src="pal4rletrns.png"><br>
     or<br><img src="pal4rletrns-0.png"><br>
     or<br><img src="pal4rletrns-b.png"></td>
  <td class=b><img src="../q/pal4rletrns.bmp"></td>
  <td>An RLE-compressed image that used &ldquo;delta&rdquo;
  codes to skip over some pixels, leaving them undefined. Some viewers
  make undefined pixels transparent, others make them black, and
  others assign them palette color 0 (purple, in this case).</td>
 </tr>

 <tr>
  <td>g/pal8.bmp</td>
  <td>3</td>
  <td class=b><img src="pal8.png"></td>
  <td class=b><img src="../g/pal8.bmp"></td>
  <td>Our standard paletted image, with 252 palette colors, and 8
   bits/pixel.</td>
 </tr>

 <tr>
  <td>g/pal8-0.bmp</td>
  <td>3</td>
  <td class=b><img src="pal8.png"></td>
  <td class=b><img src="../g/pal8-0.bmp"></td>
  <td>Every field that can be set to 0 is set to 0: pixels/meter=0;
   colors used=0 (meaning the default 256); size-of-image=0.</td>
 </tr>

 <tr>
  <td>g/pal8rle.bmp</td>
  <td>3</td>
  <td class=b><img src="pal8.png"></td>
  <td class=b><img src="../g/pal8rle.bmp"></td>
  <td>8-bit image that uses RLE compression.</td>
 </tr>

 <tr>
  <td class=q>q/pal8rletrns.bmp</td>
  <td>3</td>
  <td class=b><img src="pal8rletrns.png"><br>
     or<br><img src="pal8rletrns-0.png"><br>
     or<br><img src="pal8rletrns-b.png"></td>
  <td class=b><img src="../q/pal8rletrns.bmp"></td>
  <td>8-bit version of q/pal4rletrns.bmp.</td>
 </tr>

 <tr>
  <td>g/pal8w126.bmp</td>
  <td>3</td>
  <td class=b><img src="pal8w126.png"></td>
  <td class=b><img src="../g/pal8w126.bmp"></td>
  <td rowspan=3>Images with different widths and heights.
   In BMP format, rows are padded to a multiple of four bytes, so we
   test all four possibilities.</td>
 </tr>

 <tr>
  <td>g/pal8w125.bmp</td>
  <td>3</td>
  <td class=b><img src="pal8w125.png"></td>
  <td class=b><img src="../g/pal8w125.bmp"></td>
 </tr>

 <tr>
  <td>g/pal8w124.bmp</td>
  <td>3</td>
  <td class=b><img src="pal8w124.png"></td>
  <td class=b><img src="../g/pal8w124.bmp"></td>
 </tr>

 <tr>
  <td>g/pal8topdown.bmp</td>
  <td>3</td>
  <td class=b><img src="pal8.png"></td>
  <td class=b><img src="../g/pal8topdown.bmp"></td>
  <td>BMP images are normally stored from the bottom up, but
   there is a way to store them from the top down.</td>
 </tr>

 <tr>
  <td class=q>q/pal8offs.bmp</td>
  <td>3</td>
  <td class=b><img src="pal8.png"></td>
  <td class=b><img src="../q/pal8offs.bmp"></td>
  <td>A file with some unused bytes between the palette and the
   image. This is probably valid, but I&rsquo;m not 100% sure.</td>
 </tr>

 <tr>
  <td class=q>q/pal8oversizepal.bmp</td>
  <td>3</td>
  <td class=b><img src="pal8.png"></td>
  <td class=b><img src="../q/pal8oversizepal.bmp"></td>
  <td>An 8-bit image with 300 palette colors. This may be invalid,
   because the documentation could
   be interpreted to imply that 8-bit images aren&rsquo;t allowed
   to have more than 256 colors.</td>
 </tr>

 <tr>
  <td>g/pal8nonsquare.bmp</td>
  <td>3</td>
  <td class=b>
   <img src="pal8nonsquare-v.png"><br>
   or<br>
   <img src="pal8nonsquare-e.png">
  </td>
  <td class=b><img src="../g/pal8nonsquare.bmp"></td>
  <td>An image with non-square pixels: the X pixels/meter is twice
   the Y pixels/meter. Image <i>editors</i> can be expected to
   leave the image &ldquo;squashed&rdquo;; image <i>viewers</i> should
   consider stretching it to its correct proportions.</td>
 </tr>

 <tr>
  <td>g/pal8os2.bmp</td>
  <td>OS/2v1</td>
  <td class=b><img src="pal8.png"></td>
  <td class=b><img src="../g/pal8os2.bmp"></td>
  <td>An OS/2-style bitmap.</td>
 </tr>

 <tr>
  <td class=q>q/pal8os2sp.bmp</td>
  <td>OS/2v1</td>
  <td class=b><img src="pal8.png"></td>
  <td class=b><img src="../q/pal8os2sp.bmp"></td>
  <td>An OS/2v1 with a less-than-full-sized palette.
   Probably not valid, but such files have been seen in the wild.</td>
 </tr>

 <tr>
  <td class=q>q/pal8os2v2.bmp</td>
  <td>OS/2v2</td>
  <td class=b><img src="pal8.png"></td>
  <td class=b><img src="../q/pal8os2v2.bmp"></td>
  <td>My attempt to make an OS/2v2 bitmap.</td>
 </tr>

 <tr>
  <td class=q>q/pal8os2v2-16.bmp</td>
  <td>OS/2v2</td>
  <td class=b><img src="pal8.png"></td>
  <td class=b><img src="../q/pal8os2v2-16.bmp"></td>
  <td>An OS/2v2 bitmap whose header has only 16 bytes, instead of the full 64.</td>
 </tr>

 <tr>
  <td>g/pal8v4.bmp</td>
  <td>4</td>
  <td class=b><img src="pal8.png"></td>
  <td class=b><img src="../g/pal8v4.bmp"></td>
  <td>A v4 bitmap. I&rsquo;m not sure that the gamma and chromaticity values in
   this file are sensible, because I can&rsquo;t find any detailed documentation
   of them.</td>
 </tr>

 <tr>
  <td>g/pal8v5.bmp</td>
  <td>5</td>
  <td class=b><img src="pal8.png"></td>
  <td class=b><img src="../g/pal8v5.bmp"></td>
  <td>A v5 bitmap. Version 5 has additional colorspace options over v4, so it
   is easier to create, and ought to be more portable.</td>
 </tr>

 <tr>
  <td>g/rgb16.bmp</td>
  <td>3</td>
  <td class=b><img src="rgb16.png"></td>
  <td class=b><img src="../g/rgb16.bmp"></td>
  <td>A 16-bit image with the default color format: 5 bits each for red,
   green, and blue, and 1 unused bit.
   The whitest colors should (I assume) be displayed as pure white:
   <span style="background-color:rgb(255,255,255)">(255,255,255)</span>, not
   <span style="background-color:rgb(248,248,248)">(248,248,248)</span>.</td>
 </tr>

 <tr>
  <td>g/rgb16-565.bmp</td>
  <td>3</td>
  <td class=b><img src="rgb16-565.png"></td>
  <td class=b><img src="../g/rgb16-565.bmp"></td>
  <td>A 16-bit image with a BITFIELDS segment indicating 5 red, 6 green,
   and 5 blue bits. This is a standard 16-bit format, even supported by
   old versions of Windows that don&rsquo;t support any other non-default 16-bit
   formats.
   The whitest colors should be displayed as pure white:
   <span style="background-color:rgb(255,255,255)">(255,255,255)</span>, not
   <span style="background-color:rgb(248,252,248)">(248,252,248)</span>.</td>
 </tr>

 <tr>
  <td>g/rgb16-565pal.bmp</td>
  <td>3</td>
  <td class=b><img src="rgb16-565.png"></td>
  <td class=b><img src="../g/rgb16-565pal.bmp"></td>
  <td>A 16-bit image with both a BITFIELDS segment and a palette.</td>
 </tr>

 <tr>
  <td class=q>q/rgb16-231.bmp</td>
  <td>3</td>
  <td class=b><img src="rgb16-231.png"></td>
  <td class=b><img src="../q/rgb16-231.bmp"></td>
  <td>An unusual and silly 16-bit image, with 2 red bits, 3 green bits, and 1
  blue bit. Most viewers do support this image, but the colors may be darkened
  with a yellow-green shadow. That&rsquo;s because they&rsquo;re doing simple
  bit-shifting (possibly including one round of bit replication), instead of
  proper scaling.</td>
 </tr>

 <tr>
  <td class=q>q/rgba16-4444.bmp</td>
  <td>5</td>
  <td class=b><img src="rgba16-4444.png"></td>
  <td class=b><img src="../q/rgba16-4444.bmp"></td>
  <td>A 16-bit image with an alpha channel. There are 4 bits for each color
   channel, and 4 bits for the alpha channel.
   It&rsquo;s not clear if this is valid, but I can&rsquo;t find anything that
   suggests it isn&rsquo;t.
   </td>
 </tr>

 <tr>
  <td>g/rgb24.bmp</td>
  <td>3</td>
  <td class=b><img src="rgb24.png"></td>
  <td class=b><img src="../g/rgb24.bmp"></td>
  <td>A perfectly ordinary 24-bit (truecolor) image.</td>
 </tr>

 <tr>
  <td>g/rgb24pal.bmp</td>
  <td>3</td>
  <td class=b><img src="rgb24.png"></td>
  <td class=b><img src="../g/rgb24pal.bmp"></td>
  <td>A 24-bit image, with a palette containing 256 colors. There is little if
   any reason for a truecolor image to contain a palette, but it is legal.</td>
 </tr>

 <tr>
  <td class=q>q/rgb24largepal.bmp</td>
  <td>3</td>
  <td class=b><img src="rgb24.png"></td>
  <td class=b><img src="../q/rgb24largepal.bmp"></td>
  <td>A 24-bit image, with a palette containing 300 colors.
   The fact that the palette has more than 256 colors may cause some viewers
   to complain, but the documentation does not mention a size limit.</td>
 </tr>

 <tr>
  <td class=q>q/rgb24prof.bmp</td>
  <td>5</td>
  <td class=b><img src="rgb24.png"></td>
  <td class=b><img src="../q/rgb24prof.bmp"></td>
  <td>My attempt to make a BMP file with an embedded color profile.</td>
 </tr>

 <tr>
  <td class=q>q/rgb24lprof.bmp</td>
  <td>5</td>
  <td class=b><img src="rgb24.png"></td>
  <td class=b><img src="../q/rgb24lprof.bmp"></td>
  <td>My attempt to make a BMP file with a linked color profile.</td>
 </tr>

 <tr>
  <td class=q>q/rgb24jpeg.bmp</td>
  <td>5</td>
  <td class=b><img src="rgb24.jpg"></td>
  <td class=b><img src="../q/rgb24jpeg.bmp"></td>
  <td rowspan=2>My attempt to make BMP files with embedded JPEG and PNG images.
   These are not likely to be supported by much of anything (they&rsquo;re
   intended for printers).</td>
 </tr>

 <tr>
  <td class=q>q/rgb24png.bmp</td>
  <td>5</td>
  <td class=b><img src="rgb24.png"></td>
  <td class=b><img src="../q/rgb24png.bmp"></td>
 </tr>

 <tr>
  <td>g/rgb32.bmp</td>
  <td>3</td>
  <td class=b><img src="rgb24.png"></td>
  <td class=b><img src="../g/rgb32.bmp"></td>
  <td>A 32-bit image using the default color format for 32-bit images (no
   BITFIELDS segment). There are 8 bits per color channel, and 8 unused
   bits. The unused bits are set to 0.</td>
 </tr>

 <tr>
  <td>g/rgb32bf.bmp</td>
  <td>3</td>
  <td class=b><img src="rgb24.png"></td>
  <td class=b><img src="../g/rgb32bf.bmp"></td>
  <td>A 32-bit image with a BITFIELDS segment. As usual, there are 8 bits per
   color channel, and 8 unused bits. But the color channels are in an unusual
   order, so the viewer must read the BITFIELDS, and not just guess.</td>
 </tr>

 <tr>
  <td class=q>q/rgb32fakealpha.bmp</td>
  <td>3</td>
  <td class=b><img src="rgb24.png"><br>
    or<br>
    <img class=b src="fakealpha.png">
</td>
  <td class=b><img src="../q/rgb32fakealpha.bmp"></td>
  <td>Same as g/rgb32.bmp, except that the unused bits are set to something
   other than 0.
   If the image becomes transparent toward the bottom, it probably means
   the viewer uses heuristics to guess whether the undefined
   data represents transparency.</td>
 </tr>

 <tr>
  <td class=q>q/rgb32-111110.bmp</td>
  <td>3</td>
  <td class=b><img src="rgb24.png"></td>
  <td class=b><img src="../q/rgb32-111110.bmp"></td>
  <td>A 32 bits/pixel image, with all 32 bits used: 11 each for red and
   green, and 10 for blue. As far as I know, this is perfectly valid, but it
   is unusual.</td>
 </tr>

 <tr>
  <td class=q>q/rgba32.bmp</td>
  <td>5</td>
  <td class=b><img src="rgba32.png"></td>
  <td class=b><img src="../q/rgba32.bmp"></td>
  <td>A BMP with an alpha channel. Transparency is barely documented,
   so it&rsquo;s <i>possible</i> that this file is not correctly formed.
   The color channels are in an unusual order, to prevent viewers from
   passing this test by making a lucky guess.</td>
 </tr>

 <tr>
  <td class=q>q/rgba32abf.bmp</td>
  <td>3</td>
  <td class=b><img src="rgba32.png"></td>
  <td class=b><img src="../q/rgba32abf.bmp"></td>
  <td>An image of type BI_ALHPABITFIELDS. Supposedly, this was used on
   Windows CE. I don&rsquo;t know whether it is constructed correctly.</td>
 </tr>


 <tr>
  <td class=bad>b/badbitcount.bmp</td>
  <td>3</td>
  <td class=b>N/A</td>
  <td class=b><img src="../b/badbitcount.bmp"></td>
  <td>Header indicates an absurdly large number of bits/pixel.</td>
 </tr>

 <tr>
  <td class=bad>b/badbitssize.bmp</td>
  <td>3</td>
  <td class=b>N/A</td>
  <td class=b><img src="../b/badbitssize.bmp"></td>
  <td>Header incorrectly indicates that the bitmap is several GB in size.</td>
 </tr>

 <tr>
  <td class=bad>b/baddens1.bmp</td>
  <td>3</td>
  <td class=b>N/A</td>
  <td class=b><img src="../b/baddens1.bmp"></td>
  <td rowspan=2>Density (pixels per meter) suggests the image is <i>much</i>
      larger in one dimension than the other.</td>
 </tr>

 <tr>
  <td class=bad>b/baddens2.bmp</td>
  <td>3</td>
  <td class=b>N/A</td>
  <td class=b><img src="../b/baddens2.bmp"></td>
 </tr>

 <tr>
  <td class=bad>b/badfilesize.bmp</td>
  <td>3</td>
  <td class=b>N/A</td>
  <td class=b><img src="../b/badfilesize.bmp"></td>
  <td>Header incorrectly indicates that the file is several GB in size.</td>
 </tr>

 <tr>
  <td class=bad>b/badheadersize.bmp</td>
  <td>?</td>
  <td class=b>N/A</td>
  <td class=b><img src="../b/badheadersize.bmp"></td>
  <td>Header size is 66 bytes, which is not a valid size for any known BMP
   version.</td>
 </tr>

 <tr>
  <td class=bad>b/badpalettesize.bmp</td>
  <td>3</td>
  <td class=b>N/A</td>
  <td class=b><img src="../b/badpalettesize.bmp"></td>
  <td>Header incorrectly indicates that the palette contains an absurdly large
   number of colors.</td>
 </tr>

 <tr>
  <td class=bad>b/badplanes.bmp</td>
  <td>3</td>
  <td class=b>N/A</td>
  <td class=b><img src="../b/badplanes.bmp"></td>
  <td>The &ldquo;planes&rdquo; setting, which is required to be 1, is not 1.</td>
 </tr>

 <tr>
  <td class=bad>b/badrle.bmp</td>
  <td>3</td>
  <td class=b>N/A</td>
  <td class=b><img src="../b/badrle.bmp"></td>
  <td>An invalid RLE-compressed image that tries to cause buffer overruns.</td>
 </tr>

 <tr>
  <td class=bad>b/badwidth.bmp</td>
  <td>3</td>
  <td class=b>N/A</td>
  <td class=b><img src="../b/badwidth.bmp"></td>
  <td>The image claims to be a negative number of pixels in width.</td>
 </tr>

 <tr>
  <td class=bad>b/pal8badindex.bmp</td>
  <td>3</td>
  <td class=b>N/A</td>
  <td class=b><img src="../b/pal8badindex.bmp"></td>
  <td>Many of the palette indices used in the image are not present in the
   palette.</td>
 </tr>

 <tr>
  <td class=bad>b/reallybig.bmp</td>
  <td>3</td>
  <td class=b>N/A</td>
  <td class=b><img src="../b/reallybig.bmp"></td>
  <td>An image with a very large reported width and height.</td>
 </tr>

 <tr>
  <td class=bad>b/rletopdown.bmp</td>
  <td>3</td>
  <td class=b>N/A</td>
  <td class=b><img src="../b/rletopdown.bmp"></td>
  <td>An RLE-compressed image that tries to use top-down orientation,
   which isn&rsquo;t allowed.</td>
 </tr>

 <tr>
  <td class=bad>b/shortfile.bmp</td>
  <td>3</td>
  <td class=b>N/A</td>
  <td class=b><img src="../b/shortfile.bmp"></td>
  <td>A file that has been truncated in the middle of the bitmap.</td>
 </tr>

</table>

</body>

</html>
